/**
 * ## 函数防抖
 * 防抖函数用于限制函数的执行频率，当频繁触发某个函数时，只有在最后一次触发后等待一段指定的时间（wait）后才执行函数
 * 如果在等待时间内再次触发该函数，则重新计算等待时间
 * @param {Function} func 要进行防抖处理的函数
 * @param {number} [wait=300] 可选参数，默认为 300 毫秒，表示等待的时间
 * @returns {Function} 返回一个新的防抖函数
 */
export default function debounce(func, wait = 300) {
    // 确保 wait 是一个正整数
    if (typeof wait !== 'number' || wait < 0) {
        throw new Error('The "wait" parameter must be a non-negative number.');
    }
    let timeout;
    // 返回一个新的函数，该函数将根据防抖逻辑调用原始函数
    return function (...args) {
        const context = this;
        // 清除之前的定时器
        clearTimeout(timeout);
        // 如果 wait 为 0，直接调用 func
        if (wait === 0) {
            try {
                func.apply(context, args);
            } catch (error) {
                console.error('Error in debounced function:', error);
            }
        } else {
            // 设置新的定时器
            timeout = setTimeout(() => {
                try {
                    func.apply(context, args);
                } catch (error) {
                    console.error('Error in debounced function:', error);
                }
            }, wait);
        }
    };
}

